package com.yupi.springbootinit.model.dto.salesorder;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 销售订单新增请求
 * 支持单个产品和多个产品两种方式：
 * - 方式1（向后兼容）：使用 productCode, productName, specification, quantity
 * - 方式2（新方式）：使用 items 列表，支持多个产品
 */
@Data
public class SalesOrderAddRequest implements Serializable {

    /**
     * 销售订单号（可选，不传则自动生成）
     */
    private String orderNumber;

    /**
     * 合同号
     */
    private String contractNumber;

    /**
     * 产品料号（向后兼容字段，如果使用 items 则忽略）
     */
    private String productCode;

    /**
     * 产品名称（向后兼容字段，如果使用 items 则忽略）
     */
    private String productName;

    /**
     * 规格型号（向后兼容字段，如果使用 items 则忽略）
     */
    private String specification;

    /**
     * 订单数量（向后兼容字段，如果使用 items 则忽略）
     */
    private Integer quantity;

    /**
     * 订单总金额（可选，如果不传则根据 items 计算）
     */
    private BigDecimal totalAmount;

    /**
     * 客户名称
     */
    private String customerName;

    /**
     * 客户联系方式
     */
    private String customerContact;

    /**
     * 客户是否涉密：0-不涉密，1-涉密
     */
    private Integer isCustomerSecret;

    /**
     * 交付日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date deliveryDate;

    /**
     * 紧急程度：URGENT-紧急，NORMAL-正常，LOW-低
     */
    private String urgencyLevel;

    /**
     * 质量等级要求
     */
    private String qualityLevel;

    /**
     * 特殊要求说明
     */
    private String specialRequirement;

    /**
     * 备注信息
     */
    private String remark;

    /**
     * 订单明细列表（新方式：支持多个产品）
     * 如果提供了 items，则忽略 productCode, productName, specification, quantity 字段
     */
    private List<OrderItemRequest> items;

    /**
     * 订单明细项请求
     */
    @Data
    public static class OrderItemRequest implements Serializable {
        /**
         * 产品料号（必填）
         */
        private String productCode;

        /**
         * 产品名称（必填）
         */
        private String productName;

        /**
         * 规格型号（可选）
         */
        private String specification;

        /**
         * 数量（必填）
         */
        private Integer quantity;

        /**
         * 单价（可选）
         */
        private BigDecimal unitPrice;

        /**
         * 金额（可选，如果不传则计算：数量×单价）
         */
        private BigDecimal amount;

        /**
         * 备注（可选）
         */
        private String remark;
    }

    private static final long serialVersionUID = 1L;
}